
#include "nane/RenderSystem/d3d9/D3D9Texture.h"
#include "nane/core/assert.h"

namespace nane
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    D3D9Texture::D3D9Texture( IDirect3DTexture9* _pTexture )
        : m_pTexture( _pTexture )
    {
        NANE_ASSERT( m_pTexture != NULL, "TextureInterface must be valid" );
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    D3D9Texture::~D3D9Texture()
    {

    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    IDirect3DTexture9* D3D9Texture::getInterface()
    {
        return m_pTexture;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    byte* D3D9Texture::Lock( uint32 _x, uint32 _y, uint32 _width, uint32 _height, uint32* _pitch )
    {
        NANE_ASSERT( _pitch != NULL, "" );
        D3DLOCKED_RECT lockedRect;
        HRESULT hr = m_pTexture->LockRect(0, &lockedRect, NULL, 0);
        if( FAILED(hr) )
        {
            return NULL;
        }
        *_pitch = lockedRect.Pitch;
        return static_cast<byte*>(lockedRect.pBits);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void D3D9Texture::Unlock()
    {
        m_pTexture->UnlockRect(0);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane
